package chapter21;

import java.lang.reflect.ParameterizedType;

/**
 * @author lzy
 * @version v1.0
 * Create DateTime: 2019/2/25 19:09
 */
class Base<T> {
    private Class<T> clazz;

    // 使用反射技术得到T的真实类型
    public Class getRealType() {
        // 获取当前new的对象的泛型的父类类型
        ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
        // 获取第一个类型参数的真实类型
        this.clazz = (Class<T>) pt.getActualTypeArguments()[0];
        return clazz;
    }
}

class Child extends Base<String> {

}

public class GenericClassTest {
    public static void main(String[] args) {
        Child child = new Child();
        Class realType = child.getRealType();
        System.out.println(realType);
    }
}
